<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>

<body>
	

</body>
<script>  


// 请求嵌套，回调地域写法
function getcity1(){
	setTimeout(()=>{
		console.log('拿到湖南省')
		let a = '湖南省'
		setTimeout(()=>{
			console.log('拿到长沙市')
			let b = '长沙市';
			setTimeout(()=>{
				console.log('拿到岳麓区')
				let c ='岳麓区';
				console.log(a+b+c)
			},1000)
		},1000)
	},1000)
}
getcity1()

// 普通写法
function getcity2(){
	let a,b,c = ''
	function sheng(){
		setTimeout(()=>{
			console.log('拿到湖南省')
			a = '湖南省'
			shi()
		},1000)
	}
	function shi(){
		setTimeout(()=>{
			console.log('拿到长沙市');
			b = '长沙市'
			qu()
		},1000)
	}
	function qu(){
		setTimeout(()=>{
			console.log('拿到岳麓区')
			c = '岳麓区'
			console.log(a+b+c)
		},1000)
	}
	sheng()

}
getcity2()


// promise写法
let p = new Promise((resolve,reject)=>{
		setTimeout(()=>{
			console.log('拿到湖南省')
			resolve('湖南省')
		},1000)
	})
p.then(res=>{
	return new Promise((resolve,reject)=>{
		setTimeout(()=>{
			console.log('拿到长沙市')
			resolve(res+'长沙市')
		},2000)
	})
}).then(res=>{
	return new Promise((resolve,reject)=>{
		setTimeout(()=>{
			console.log('拿到岳麓区')
			resolve(res+'岳麓区')
		},3000)
	})
}).then(res=>{
	console.log(res)
})



// promise all 用法
// function fn1(){
// 	return new Promise((resolve,reject)=>{
// 		setTimeout(()=>{
// 			resolve(5)
// 		},2000)
// 	})
// }
// function fn2(){
// 	return new Promise((resolve,reject)=>{
// 		setTimeout(()=>{
// 			resolve(8)
// 		},1300)
// 	})
// }
// function fn3(){
// 	return new Promise((resolve,reject)=>{
// 		setTimeout(()=>{
// 			resolve(9)
// 		},1800)
// 	})
// }

// let arr = Promise.all([fn1(),fn2(),fn3()])
// console.log(arr)
// arr.then(res=>{
// 	console.log(res)
// 	sum(...res)
// })
// function sum(...rest){
// 	let s = 0;
// 	console.log(...rest)
// 	for(let item of rest){
// 		s+=item
// 		console.log(item)
// 	}
// 	console.log(s)
// }

// promise race用法
// let newarr = Promise.race([fn1(),fn2(),fn3()])
// newarr.then(res=>{
// 	console.log(res)
// })


// generator 用法
// function *fn(){
// 	yield f1();
// 	yield f2();
// 	yield f3();
// 	return 'ending';
// }
// function f1(){
// 	return new Promise((resolve,reject)=>{
// 		setTimeout(()=>{
// 			console.log(1)
// 			resolve()
// 		},1000)
// 	})
// }
// function f2(){
// 	return new Promise((resolve,reject)=>{
// 		setTimeout(()=>{
// 			console.log(2)
// 			resolve()
// 		},3000)
// 	})
// }
// function f3(){
// 	return new Promise((resolve,reject)=>{
// 		setTimeout(()=>{
// 			console.log(3)
// 			resolve()
// 		},1000)
// 	})
// }
// function go(){
// 	var f = fn()
// 	console.log(f)
// 	var status = f.next()
// 	function step(status){
// 		console.log(status)
// 		if(!status.done){
// 			status.value.then(res=>{
// 				step(f.next())
// 			})
// 		}
// 	}
// 	step(status)
// }
// go()



</script> 
</html>